package com.cssl.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cssl.dto.AddProductDTO;
import com.cssl.entity.Product;
import com.cssl.service.ProductService;
import com.cssl.mapper.ProductMapper;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.security.SecureRandom;
import java.util.*;

/**
* @author 风止
* @description 针对表【product】的数据库操作Service实现
* @createDate 2025-03-24 09:56:38
*/
@Service
public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product>
    implements ProductService{

    @Override
    public Boolean reduceInventory(Map<Integer, Integer> map) {
        List<Product> productsList = new ArrayList<>(); // 需要扣减库存的商品集合
        //遍历map获取需要扣减库存的商品
        map.forEach((k,v) -> {
            //查询当前商品的总库存
            Product p = super.baseMapper.selectById(k);
            //把获取的商品id 和 剩余库存数 添加到商品集合中
            productsList.add(new Product(k,p.getInventory() - v));
        });
        return super.saveOrUpdateBatch(productsList);
    }

    /**
     * 回滚扣减库存
     * @param map
     * @return
     */
    @Override
    public Boolean HgReduceInventory(Map<Integer, Integer> map) {
        List<Product> productsList = new ArrayList<>(); // 需要扣减库存的商品集合
        //遍历map获取需要扣减库存的商品
        map.forEach((k,v) -> {
            //查询当前商品的总库存
            Product p = super.baseMapper.selectById(k);
            //把获取的商品id 和 剩余库存数 添加到商品集合中
            productsList.add(new Product(k,p.getInventory() + v));
        });
        return super.saveOrUpdateBatch(productsList);
    }


    /**
     * 添加商品
     * @param file
     * @param addProductDTO
     * @return
     */
    @Override
    public Map<String, Object> addProduct(MultipartFile file, AddProductDTO addProductDTO) {
        Map<String, Object> result = new HashMap<>();
        try {
            // 检查文件是否为空
            if (file.isEmpty()) {
                result.put("status", "error");
                result.put("message", "文件为空");
                return result;
            }

            // 检查文件类型
            String contentType = file.getContentType();
            if (!contentType.startsWith("image/")) {
                result.put("status", "error");
                result.put("message", "只支持图片文件");
                return result;
            }

            // 保存文件到指定目录
            String fileName = UUID.randomUUID().toString().replace("-", "")+file.getOriginalFilename();
            String filePath = "E:\\CompletionProject\\InternetBar\\z_image\\productImage" + fileName;
            File dest = new File(filePath);
            file.transferTo(dest);

            //将商品信息保存到数据库中
            boolean idAdd = super.save(new Product(
                    addProductDTO.getPrice(),
                    addProductDTO.getShelf_time(),
                    addProductDTO.getInventory(),
                    0,
                    addProductDTO.getName(),
                    fileName,
                    addProductDTO.getDescription()
            ));

            //判断是否添加成功
            if(idAdd)
                result.put("data", "数据添加成功");
            else
                result.put("data", "数据添加失败");

            result.put("status", "success");
            result.put("message", "文件上传成功");
            result.put("filePath", filePath);
        } catch (IOException e) {
            result.put("status", "error");
            result.put("message", "文件上传失败: " + e.getMessage());
        }
        return result;
    }
}




